#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main(int argc, char **argv) {
	pid_t pid;
	uid_t uid, euid;
	uid = getuid();
	euid = geteuid();
	//交换uid和euid，临时转让文件本身的root权限给PHP(apache)。
	setreuid(euid, uid);
	//生成子进程
	if ((pid = fork()) == 0) {
		//子进程下继续生成孙进程
		if ((pid = fork()) > 0) {
			exit(0); //杀掉子进程
		} else if (pid == 0) {
			sleep(1);
			//由于子进程已死，因此孙进程成为孤儿进程，并自动由init进程领养。
			//此时孙进程发送消息给apache，请求其重启。
			system("/usr/local/apache/bin/apachectl -k graceful");
			exit(0);
		}
	} else if (pid > 0) {
		//程序最初的父进程在这里回收子进程。
		waitpid(pid, NULL, 0);
	}
	return 0;
}